package strategy;

/**
 * @author Lion
 * 抽象类鸭子
 */
public abstract class Duck {
	
//	将会变的飞行行为和叫行为独立出来封装接口
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public void setFlyBehavior(FlyBehavior fb) {
		this.flyBehavior = fb;
	}

	public void setQuackBehavior(QuackBehavior qb) {
		this.quackBehavior = qb;
	}

	public abstract void display();
	
	/**
	 * 执行飞,委托给行为类
	 */
	public void performFly() {
		flyBehavior.fly();
	}
	
	/**
	 * 执行叫,委托给行为类
	 */
	public void performQuack() {
		quackBehavior.quack();
	}
	
	/**
	 * 通用方法,所有的鸭子都会游,甚至诱饵鸭
	 */
	public void swim() {
		System.out.println("All ducks float,even decoys!");
	}
}
